#Requires AutoHotkey v2.0

; 方法1: 临时文件重定向方式（推荐）
runcmd_file(command) {
    tempFile := A_Temp "\\output.txt"
    RunWait('cmd /c ' command ' > "' tempFile '"', , "Hide")
    if FileExist(tempFile) {
        result := FileRead(tempFile)
        FileDelete(tempFile)
        return result
    }
    return "命令执行失败"
}

; 方法2: 使用ComSpec环境变量（更稳定）
runcmd_comspec(command) {
    tempFile := A_Temp "\\output.txt"
    RunWait(A_ComSpec ' /c ' command ' > "' tempFile '"', , "Hide")
    if FileExist(tempFile) {
        result := FileRead(tempFile)
        FileDelete(tempFile)
        return result
    }
    return "命令执行失败"
}

; 方法3: 同时获取标准输出和错误输出
runcmd_with_error(command) {
    tempFile := A_Temp "\\output.txt"
    RunWait(A_ComSpec ' /c ' command ' > "' tempFile '" 2>&1', , "Hide")
    if FileExist(tempFile) {
        result := FileRead(tempFile)
        FileDelete(tempFile)
        return result
    }
    return "命令执行失败"
}

g1:=Gui("+AlwaysOnTop", "命令输出测试")
txt1:=g1.Add("Edit","w600 h400 VScroll ReadOnly", "")
btn1:=g1.Add("Button","w100 h30 x10", "方法1测试")
btn2:=g1.Add("Button","w100 h30 x120", "方法2测试")
btn3:=g1.Add("Button","w100 h30 x230", "方法3测试")

; 事件绑定
btn1.OnEvent("Click", (*) => test_method1())
btn2.OnEvent("Click", (*) => test_method2())
btn3.OnEvent("Click", (*) => test_method3())

test_method1() {
    result := runcmd_file("ipconfig")
    txt1.Value := "方法1结果:\n" . result
}

test_method2() {
    result := runcmd_comspec('systeminfo | findstr /C:"系统名称"')
    txt1.Value := "方法2结果:\n" . result
}

test_method3() {
    result := runcmd_with_error('dir c:\\ /b')
    txt1.Value := "方法3结果:\n" . result
}

g1.Show()